﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaskelot.SP.Model.Client;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using Kaskelot.SP.Core;
using Kaskelot.SP.Model.Client.Forms;
using Microsoft.SharePoint;

namespace Kaskelot.SP.Services.Client.Mapping
{
	public static class ClientKursTillfalleExtensions
	{
		public static ClientKursTillfalle ToClientContract(this KursTillfalle entity)
		{
			ClientKursTillfalle b = new ClientKursTillfalle();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static ClientKursTillfalle ToMinimalClientContract(this KursTillfalle entity)
		{
			ClientKursTillfalle b = new ClientKursTillfalle();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static KursTillfalle ToContract(this ClientKursTillfalle b)
		{
			KursTillfalle entity = new KursTillfalle();

			CopyToEntity(b, entity);

			return entity;
		}

		public static KursTillfalle UpdateContract(this KursTillfalle kt, KursTillfalleForm form)
		{
			if (kt.Id == Guid.Empty)
			{
				kt.Id = Guid.NewGuid();
			}

			kt.Kursdatum = DateTime.Parse(form.KursDatum);
			kt.KursId = new Guid(form.KursId);
			kt.Adress = form.Adress;
			kt.Sal = form.Sal;
			kt.Starttid = TimeSpan.Parse(form.Starttid);
			kt.Sluttid = TimeSpan.Parse(form.Sluttid);
			kt.Lokal = form.Lokal;

			kt.Andrad = DateTime.Now;
			kt.AndradAv = SPContext.Current.Web.CurrentUser.Name;

			if (form.Kursansvarig.IsGuid())
				kt.Kursansvarig = new Guid(form.Kursansvarig);
			else
				kt.Kursansvarig = null;

			return kt;
		}

		private static void CopyFromEntity(KursTillfalle from, ClientKursTillfalle to, bool minimal)
		{
			to.Id = from.Id.ToString();
			to.ValId = from.ValId.ToString();

			to.Andrad = from.Andrad.HasValue ? from.Andrad.ToString("yyyy-MM-dd") : string.Empty;
			to.AndradAv = from.AndradAv.ToSharePointFullName();
			to.Skapad = from.Skapad.ToString("yyyy-MM-dd");
			to.SkapadAv = from.SkapadAv.ToSharePointFullName();

			to.KursDatum = from.Kursdatum.ToString("yyyy-MM-dd");
			to.KursId = from.KursId.ToString();
			to.Adress = from.Adress;
			to.Sal = from.Sal;
			to.Starttid = from.Starttid.Hours + ":" + from.Starttid.Minutes.ToString().PadLeft(2, '0');
			to.Sluttid = from.Sluttid.Hours + ":" + from.Sluttid.Minutes.ToString().PadLeft(2, '0');

			to.KursNamn = from.KursNamn;
			to.LedigaPlatser = from.LedigaPlatser;

			to.Kursansvarig = from.Kursansvarig.ToString();
			to.KursansvarigNamn = from.KursansvarigNamn;
			to.Lokal = from.Lokal;
		}

		private static void CopyToEntity(ClientKursTillfalle from, KursTillfalle to)
		{
			to.Id = new Guid(from.Id);
			to.ValId = new Guid(from.ValId);

			if (from.Skapad != null)
				to.Skapad = DateTime.Parse(from.Skapad);

			to.SkapadAv = from.SkapadAv;

			to.Kursdatum = DateTime.Parse(from.KursDatum);

			to.Adress = from.Adress;
			to.Sal = from.Sal;
			to.Starttid = TimeSpan.Parse(from.Starttid);
			to.Sluttid = TimeSpan.Parse(from.Sluttid);

			if (from.KursId.IsGuid())
				to.KursId = new Guid(from.KursId);

			to.KursNamn = from.KursNamn;
			to.KursansvarigNamn = from.KursansvarigNamn;
			to.Lokal = from.Lokal;

			if (from.Kursansvarig.IsGuid())
				to.Kursansvarig = new Guid(from.Kursansvarig);
		}
	}
}
